Multi-processor computing systems are becoming increasingly more common in a variety of applications. A multi-processor system is one which includes multiple processors, where the processors can be physical processors, logical processors, or a combination thereof. In order to ensure that instructions and data are safe for execution in a multi-processor environment, various processes implemented by the operating system can be organized into a number of mutually exclusive domains according to their functionality. A “domain”, in this context, is a grouping of processes. Every process capable of execution by the processing device is assigned to exactly one domain. Two processes in different domains operating on the same data simultaneously must use locking to protect the data. Since only one process from a given domain can run at any point in time, processes in the same domain do not need to use locking to protect shared data.
Some systems implement the above-mentioned technique in a storage server or a networked storage system. A networked storage system may include one or more storage servers, which may be storage appliances. A storage server may provide services related to the organization of data on mass storage devices, such as disks. Some of these storage servers are commonly referred to as filers or file servers. An example of such a storage server is any of the Filer products made by Network Appliance, Inc. in Sunnyvale, Calif. The storage appliance may be implemented with a special-purpose computer or a general-purpose computer. Depending on the application, various networked storage systems may include different numbers of storage servers. A storage server typically runs a storage operating system.
The domains of a storage operating system running on a storage server can be organized according to the critical path pipeline of the storage server. For example, a critical path pipeline is when a storage server receives a data access request (read or write) from a client over a network, a network software layer of the storage server sends an appropriate message to the storage server's file system, which processes the message to determine where the corresponding data is stored, and which then forwards a corresponding message to a storage software layer of the storage server. Each of these phases of processing the request is carried out by a different stage in the pipeline; as such, a separate domain can be created for each stage, e.g., a domain for all network-specific processes of the storage server, a domain for all file system-related processes of the storage server, a domain for all storage-specific processes of the storage server, etc.
It has been observed in certain storage servers that allow multiple messages to be running in parallel, that the allocation of resources tends to be a bottleneck in the critical path of the storage server, thus limiting the throughput of the storage server. Specifically, this phenomenon may be observed in systems that utilize a global pool of resources that may require explicit locking (e.g., via a lock command).